Hive常用字符串函数(工作中总结整理)

您所在的位置:网站首页 hive string函数 Hive常用字符串函数(工作中总结整理)

Hive常用字符串函数(工作中总结整理)

2023-09-06 18:57| 来源: 网络整理| 查看: 265

【"Hive内置聚合函数"】https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Built-inAggregateFunctions(UDAF)

substr

substr(string A, int start), 返回字符串A从start位置到结尾的字符串

substr(string A, int start, int len),返回字符串A从start位置开始,长度为len的字符串

substring

substring(string A, int start), 返回字符串A从start位置到结尾的字符串

substring(string A, intstart, int len),返回字符串A从start位置开始,长度为len的字符串

concat

使用concat()函数将字符串和字符串连接起来

eg: user表中phone为13578787878,需处理成1357878; hive > SELECT concat(substr(phone,1,3),',',substr(phone,8)) AS phone FROM user hive > 135****7878

seq1      seq2

11111    CC0000

11111    CC1111

11111    CC2222

22222   CC3333

22222   CC4444

collect_set

collect_set 是 Hive 内置的一个聚合函数, 它返回一个消除了重复元素的对象集合, 其返回值类型是 array 。 将上面表中一个seq1可能会占用多行转换为每个seq1占一行的目标表格式,实际是“列转行”。

hive > select seq1,collect_set(seq2) from tab1 group by seq1

seq1     seq2

11111    ["CC0000","CC1111","CC2222"]

22222   ["CC3333","CC4444"] hive > select seq1,SIZE(collect_set(seq2)) from tab1 group by seq1 hive > 22222 2 hive > 11111 3

 

concat_ws hive > select seq1,concat_ws(',',collect_set(seq2)) from tab1 group by seq1 seq1 seq211111 CC0000,CC1111,CC222222222 CC3333,CC4444 collect_set的作用:

       (1)去重,对group by后面的seq1进行去重

       (2)对group by以后属于同一seq1的形成一个集合,结合concat_ws对集合中元素使用,进行分隔形成字符串

eg: UserOrder表中user, order_type, order_number三列,需处理成行如:

user1 order_type1(order_number1),order_type2(order_number2)一行数据

hive > select user,concat_ws(',',collect_set(concat(order_type,'(',order_number,')'))) items from UserOrder group by user

 

explode

explode()接受一个数组(或一个map)作为输入,并将数组元素(map)作为单独的行输出。 UDTF可以在SELECT表达式列表中使用,也可以作为LATERAL VIEW的一部分使用。

数据格式如下:

Array myCol

[100,200,300]

[400,500,600]

hive > SELECT explode(myCol) AS myNewCol FROM myTable;

 

结果如下:

(int)myNewCol

100

200

300

400

500

600

Map和array类似

hive >SELECT explode(myMap) AS (myMapKey, myMapValue) FROM myMapTable;

 

LATERAL VIEW

Lateral View用于UDTF(user-defined table generating functions)中将行转成列,Lateral View与explode等udtf就是天生好搭档,explode将复杂结构一行拆成多行,然后再用Lateral View做各种聚合。

现有基础表pageAds(表结构如下):

Column_name    Column_name

pageid                 String

add_list                Array

数据格式如下:

pageid              add_list

front_page         [1,2,3]

contact_page     [3,4,5]

并且用户希望计算广告在所有页面中显示的总次数。 使用lateral view explode()可以使用查询将adid_list转换为单独的行(记得写别名):

hive >SELECT pageid, adid FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

结果如下:

pageid(string) adid(int)

front_page       1front_page       2front_page       3contact_page   3contact_page   4contact_page   5

为了统计每个页面的数量,需要对adid进行group by分组,然后count

hive >SELECT adid, count(1) FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid GROUP BY adid;

 

结果如下:

int adid count(1)

1      1

2      1

3      2

4      1

5      1

但有些情况下,需要自己用split函数将拼接的字符串转换为分割array数组类型

hive >SELECT bb FROM user as aa lateral view explode(split(concat_ws(',',id,userid,phone),',') )b as bb

 

length

length(String A)

返回值:int

hive > SELECT length('abcdefg') from tab

7

解析json

现有表test中字段data如下json格式:

{"store":{"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],"bicycle":{"price":19.951,"color":"red1"}},"email":"amy@only_for_json_udf_test.net","owner":"amy1"}

1.get_json_object(string json_string, string path)

用来解析json字符串中的一个字段

说明:解析json的字符串json_string,返回path指定的内容。若json字符串无效,则返回NULL。

get单层值

hive > select get_json_object(data, '$.owner') from test;

amy1

get多层值

hive > select get_json_object(data, '$.store.bicycle.price') from test;

19.951

get数组值[]

hive > select get_json_object(data, '$.store.fruit[0]') from test;

{"weight":8,"type":"apple"}

get多个字段

hive > SELECT get_json_object(data,'$.owner') as owner,get_json_object(data,'$.fruit[0].type')as type FROM test

2.json_tuple(jsonStr, k1, k2, ...)

用来解析json字符串中的多个字段

使用json_tuple对象时,可以一次获取多个对象并且可以被组合使用

hive > SELECT aa.owner,aa.email FROM test lateral view json_tuple(data,'owner','email')aa AS owner,email

 

 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3